<?php

/**
 * 加载类
 * @param <type> $fun
 */
function load_help($fun){
    $path   = ROOT.DIRECTORY_SEPARATOR.'libs'.DIRECTORY_SEPARATOR.'core'.DIRECTORY_SEPARATOR.'helper'.DIRECTORY_SEPARATOR;
    include $path.$fun.'Helper.php';
}

function getUrlTitle($url) {
    $fp = @file_get_contents($url);
    preg_match('~<title>(.*?)</title>~i', $fp, $re);
    $check = mb_check_encoding($re[1], 'utf-8');
    if($check) {
        return $re[1];
    }

    $check = mb_check_encoding($re[1], 'gbk');
    if($check) {
        $re[1]  = mb_convert_encoding($re[1], 'utf-8', 'gbk');
    }


    $check = mb_check_encoding($re[1], 'big5');
    if($check) {
        $re[1]  = mb_convert_encoding($re[1], 'utf-8', 'big5');
        //echo 2;
    }

    return trim($re[1]);
}

function getBr(){
    if(substr(PHP_OS, 0, 3) == 'WIN' || (isset($_ENV['OS']) && strstr($_ENV['OS'], 'indow'))) {
        return "\r\n";
    }else{
        return "\n";
    }
}

function url_for($url) {
    return Router::url($url);
}

function setFlashMsg($msg) {
    $_SESSION['flash_massage'] = $msg;
}

function getFlashMsg() {
    if (empty($_SESSION['flash_massage'])) {
        return false;
    }
    $msg = $_SESSION['flash_massage'];
    unset($_SESSION['flash_massage']);
    return $msg;
}

/**
 * 简化echo
 *
 * @param string $str
 */
function e($str) {
    echo $str;
}

/**
 *  获取散列文件夹
 * @param <type> $uhash
 * @return string
 */
function hashUrlPath($uhash){
    $uhash  = str_split($uhash, 2);
    $dir    = ROOT . '/static/url/'.$uhash[0]. '/' .$uhash[1].'/';
    return $dir;
}

/**
 * 创建uhash文件夹
 * @param <type> $uhash
 */
function createHashUrlDir($uhash, $url) {
    $dir  = hashUrlPath($uhash);
    if(!is_dir($dir)) {
        mkdir($dir, 0777, true);
    }
    $url    = serialize($url);
    file_put_contents($dir.$uhash, $url);
}

/**
 * 获取网址
 * @param <String> $uhash
 * @return <String>
 */
function getHashUrl($uhash){
    $file       = hashUrlPath($uhash).$uhash;
    $content    = null;
    if(file_exists($file)){
        $content    = file_get_contents($file);
        $content    = unserialize($content);
        $content    = $content['url'];
    }
    return $content;
}

/**
 * 驼峰字符串转换,将以_分割的字符串转换为以大写分割
 *
 * @param string $lowerCaseAndUnderscoredWord
 * @return string
 */
function camelize($lowerCaseAndUnderscoredWord) {
    $replace = str_replace(" ", "", ucwords(str_replace("_", " ", $lowerCaseAndUnderscoredWord)));
    return $replace;
}

/**
 * 将以大写分割的字符串转换为以_分割
 *
 * @param string $camelCasedWord
 * @return string
 */
function underscore($camelCasedWord) {
    $replace = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $camelCasedWord));
    return $replace;
}

function get_block($module, $block, $vars = array()) {
    $m = camelize($module);
    $b = camelize($block);
    
    $block_class = $m.'Block';
    $module = new $block_class;
    $params = Request::getInstance()->getParams();
    $params['module'] = $m;
    $params['action'] = $b;
    $params = array_merge($params, $vars);
    //print_r($params);
    $module->setParams($params);
    $module->setView(new PhpView());
    $module->getView()->layout = null;
    $module->getView()->webroot = Request::getInstance()->getParams('webroot');
    
    ob_start();
    call_user_func(array($module, $b.'Block'));
    return ob_get_clean();
}

function short_url($input) {
  $base32 = array (
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
    'i', 'j', 'k', 'l', 'm', 'n', 'p','q',
     'r', 's', 't', 'u', 'v', 'w', 'x','y',
     'z', '1', '2', '3', '4', '5','6','7',
      '8','9'
    );

  $hex = md5($input);
  $hexLen = strlen($hex);
  $subHexLen = $hexLen / 8;
  $output = array();

  for ($i = 0; $i < $subHexLen; $i++) {
    $subHex = substr ($hex, $i * 8, 8);
    $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
    $out = '';

    for ($j = 0; $j < 6; $j++) {
      $val = 0x0000001F & $int;
      $out .= $base32[$val];
      $int = $int >> 5;
    }

    $output[] = $out;
  }

  return $output;
}

/**
 * 获取操作系统名称
 * @return string
 */
function getOsName($name=null) {
    if(empty($name)) {
        $name   = $_SERVER['HTTP_USER_AGENT'];
    }
    
    if (strpos($name, 'NT 5.1')) {
        $os = 'Windows XP (SP2)';
    } elseif(strpos($name, 'NT 5.2') && strpos($name, 'WOW64')){
        $os = 'Windows XP 64-bit Edition';
    } elseif(strpos($name, 'NT 5.2')) {
        $os = 'Windows 2003';
    } elseif(strpos($name, 'Windows NT 6.1')) {
        $os = 'Windows 7';
    } elseif(strpos($name, 'Windows NT 7.0')) {
        $os = 'Windows 8';
    } elseif(strpos($name, 'NT 6.0')) {
        $os = 'Windows Vista';
    } elseif(strpos($name, 'NT 5.0')) {
        $os = 'Windows 2000';
    } elseif(strpos($name, '4.9')) {
        $os = 'Windows ME';
    } elseif(strpos($name, 'NT 4')) {
        $os = 'Windows NT 4.0';
    } elseif(strpos($name, '98')) {
        $os = 'Windows 98';
    } elseif(strpos($name, '95')) {
        $os = 'Windows 95';
    } elseif(strpos($name, 'Mac')) {
        $os = 'Mac';
    } elseif(strpos($name, 'Linux')) {
        $os = 'Linux';
    } elseif(strpos($name, 'Unix')) {
        $os = 'Unix';
    } elseif(strpos($name, 'FreeBSD')) {
        $os = 'FreeBSD';
    } elseif(strpos($name, 'SunOS')) {
        $os = 'SunOS';
    } elseif(strpos($name, 'BeOS')) {
        $os = 'BeOS';
    } elseif(strpos($name, 'OS/2')) {
        $os = 'OS/2';
    } elseif(strpos($name, 'PC')) {
        $os = 'Macintosh';
    } elseif(strpos($name, 'AIX')) {
        $os = 'AIX';
    } elseif(strpos($name, 'IBM OS/2')) {
        $os = 'IBM OS/2';
    } elseif(strpos($name, 'BSD')) {
        $os = 'BSD';
    } elseif(strpos($name, 'NetBSD')) {
        $os = 'NetBSD';
    } else {
        $os = 'ohter';
    }
    return $os;
}

/**
 * 获取浏览器名称
 * @return string
 */
function getIeName($name=null){
    if(empty($name)) {
        $name   = $_SERVER['HTTP_USER_AGENT'];
    }
    if (strpos($name, 'Maxthon')) {
        $browser = 'Maxthon';
    } elseif(strpos($name, 'MSIE 8.0')) {
       $browser = 'MSIE 8.0';
    } elseif(strpos($name, 'MSIE 7.0')) {
        $browser = 'MSIE 7.0';
    } elseif(strpos($name, 'MSIE 6.0')) {
        $browser = 'MSIE 6.0';
    } elseif(strpos($name, 'NetCaptor')) {
       $browser = 'NetCaptor';
    } elseif(strpos($name, 'Netscape')) {
        $browser = 'Netscape';
    } elseif(strpos($name, 'Lynx')) {
        $browser = 'Lynx';
    } elseif(strpos($name, 'Opera')) {
        $browser = 'Opera';
    } elseif(strpos($name, 'Konqueror')) {
        $browser = 'Konqueror';
    } elseif(strpos($name, 'Firefox')) {
        $browser = 'Firefox';
    } elseif(strpos($name,'Safari')) {
        $browser = 'Safari';
    } else {
        $browser = 'other';
    }
    return $browser;
}

/**
 * 获取来源
 * @return <String>
 */
function getReferer() {
    if(!array_key_exists('HTTP_REFERER', $_SERVER)) {
        return '直接输入';
    }else{
        return $_SERVER['HTTP_REFERER'];
    }
}

/**
 * 获取识别符号
 * @return <String>
 */
function getRequestUhash(){
    return str_replace(array('/','!'), '', $_SERVER['REQUEST_URI']);
}

/**
 * 返回省份、城市
 * @param <String> $ip
 * @return Array
 */
function getLocal($ip='211.160.166.70') {
    $url    = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='.$ip;
    $req    = new HTTP_Request($url);
    $req->sendRequest();
    //$req->setURL($url);
    //$req->sendRequest();
    $data   = array();
    $code   = $req->getResponseCode();

    if($code == 200 ){
        $ip = preg_replace('/[^\{]+(\{[^;]+);/i', '\\1', $ip);
        $data = array();
        if(is_array($ip)) {
            foreach(json_decode($ip, true) as $k => $v) {
                $data[$k] = $v;
            }
        }
    }
    if(!array_key_exists('province', $data)) {
        $data['province']   = '';
    }
    if(!array_key_exists('city', $data)) {
        $data['city']   = '';
    }

    return $data;
}
/**
 * 获取IP地址
 * @return <String>
 */
function getIp() {
    if ($_SERVER["HTTP_X_FORWARDED_FOR"])
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if ($_SERVER["HTTP_CLIENT_IP"])
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if ($_SERVER["REMOTE_ADDR"])
        $ip = $_SERVER["REMOTE_ADDR"];
    else if (getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");
    else
        $ip = "127.0.0.1";
    return $ip;
}

/**
 * 获取蜘蛛
 * @return <type>
 */
function getRoots()
{
        $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);

        if (strpos($useragent, 'googlebot') !== false){
                return 'Googlebot';
        }

        if (strpos($useragent, 'msnbot') !== false){
                return 'MSNbot';
        }

        if (strpos($useragent, 'slurp') !== false){
                return 'Yahoobot';
        }

        if (strpos($useragent, 'baiduspider') !== false){
                return 'Baiduspider';
        }

        if (strpos($useragent, 'sohu-search') !== false){
                return 'Sohubot';
        }

        if (strpos($useragent, 'lycos') !== false){
                return 'Lycos';
        }

        if (strpos($useragent, 'robozilla') !== false){
                return 'Robozilla';
        }
        return false;
}

/**
 * Passport 加密函数
 *
 * @param		string		等待加密的原字串
 * @param		string		私有密匙(用于解密和加密)
 *
 * @return	string		原字串经过私有密匙加密后的结果
 */
function passport_encrypt($txt, $key='CzAIZwUxSq12') {

    // 使用随机数发生器产生 0~32000 的值并 MD5()
    srand((double) microtime() * 1000000);
    $encrypt_key = md5(rand(0, 32000));

    // 变量初始化
    $ctr = 0;
    $tmp = '';

    // for 循环，$i 为从 0 开始，到小于 $txt 字串长度的整数
    for ($i = 0; $i < strlen($txt); $i++) {
        // 如果 $ctr = $encrypt_key 的长度，则 $ctr 清零
        $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
        // $tmp 字串在末尾增加两位，其第一位内容为 $encrypt_key 的第 $ctr 位，
        // 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
        $tmp .= $encrypt_key[$ctr] . ($txt[$i] ^ $encrypt_key[$ctr++]);
    }

    // 返回结果，结果为 passport_key() 函数返回值的 base64 编码结果
    return base64_encode(passport_key($tmp, $key));
}
/**
 * Passport 解密函数
 *
 * @param		string		加密后的字串
 * @param		string		私有密匙(用于解密和加密)
 *
 * @return	string		字串经过私有密匙解密后的结果
 */
function passport_decrypt($txt, $key='CzAIZwUxSq12') {

    // $txt 的结果为加密后的字串经过 base64 解码，然后与私有密匙一起，
    // 经过 passport_key() 函数处理后的返回值
    $txt = passport_key(base64_decode($txt), $key);

    // 变量初始化
    $tmp = '';

    // for 循环，$i 为从 0 开始，到小于 $txt 字串长度的整数
    for ($i = 0; $i < strlen($txt); $i++) {
        // $tmp 字串在末尾增加一位，其内容为 $txt 的第 $i 位，
        // 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
        $tmp .= $txt[$i] ^ $txt[++$i];
    }

    // 返回 $tmp 的值作为结果
    return $tmp;
}

/**
 * Passport 密匙处理函数
 *
 * @param		string		待加密或待解密的字串
 * @param		string		私有密匙(用于解密和加密)
 *
 * @return	string		处理后的密匙
 */
function passport_key($txt, $encrypt_key) {

    // 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
    $encrypt_key = md5($encrypt_key);

    // 变量初始化
    $ctr = 0;
    $tmp = '';

    // for 循环，$i 为从 0 开始，到小于 $txt 字串长度的整数
    for ($i = 0; $i < strlen($txt); $i++) {
        // 如果 $ctr = $encrypt_key 的长度，则 $ctr 清零
        $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
        // $tmp 字串在末尾增加一位，其内容为 $txt 的第 $i 位，
        // 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
        $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
    }

    // 返回 $tmp 的值作为结果
    return $tmp;
}

function getCountIp($rs){
    if(!empty($rs)) {
        return $rs->getIp();
    }else{
        return 0;
    }
}

function getCountPv($rs){
    if(!empty($rs)) {
        return $rs->getPv();
    }else{
        return 0;
    }
}